package com.dji.sdk.config.version;

import com.dji.sdk.cloudapi.device.DeviceEnum;
import com.dji.sdk.exception.CloudSDKException;

import java.util.Arrays;

/**
 * @author sean
 * @version 1.7
 * @date 2023/5/19
 */
public enum GatewayTypeEnum {

    RC(DeviceEnum.RC, DeviceEnum.RC_PLUS, DeviceEnum.RC_PRO),

    DOCK(DeviceEnum.DOCK),

    DOCK2(DeviceEnum.DOCK2, DeviceEnum.A40_ULTRA),
    ;

    private final DeviceEnum[] gateway;

    GatewayTypeEnum(DeviceEnum... gateway) {
        this.gateway = gateway;
    }

    public DeviceEnum[] getGateway() {
        return gateway;
    }


    public static GatewayTypeEnum find(DeviceEnum device) {
        return Arrays.stream(values())  // 1. 遍历当前枚举的所有实例（RC、DOCK、DOCK2）
                .filter(gateway ->          // 2. 过滤出符合条件的枚举实例
                        Arrays.stream(gateway.gateway)  // 遍历当前枚举实例的 gateway 数组（存储对应的 DeviceEnum）
                                .anyMatch(deviceEnum -> device == deviceEnum)  // 检查数组中是否包含传入的 device
                )
                .findAny()  // 3. 获取第一个匹配的枚举实例
                .orElseThrow(() -> new CloudSDKException(GatewayTypeEnum.class, device));  // 4. 无匹配时抛出异常
    }
}
